package br.com.etico.entity.uml;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name = "cliente")
//@SequenceGenerator(name = "cliente_id_seq", sequenceName = "cliente_id_seq")
public class Cliente implements Serializable {

	/**
	 * @uml.property name="id"
	 */
	@Id
//	@GeneratedValue(strategy = GenerationType.AUTO, generator = "cliente_id_seq")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	
//	@Fetch(FetchMode.JOIN)
	@Fetch(FetchMode.SELECT)
	@Cascade(CascadeType.ALL)
	@OneToMany(mappedBy = "cliente", fetch = FetchType.LAZY)
	private List<Endereco> endereco;
	
	/**
	 * @uml.property name="nome"
	 */
	@Column(name = "nome", nullable = false, length = 60)
	private String nome;
	
	/**
	 * @uml.property name="cpf"
	 */
	@Column(name = "cpf", nullable = true, length = 11)
	private String cpf;

	/**
	 * Getter of the property <tt>id</tt>
	 * 
	 * @return Returns the id.
	 * @uml.property name="id"
	 */
	public long getId() {
		return id;
	}

	/**
	 * Setter of the property <tt>id</tt>
	 * 
	 * @param id
	 *            The id to set.
	 * @uml.property name="id"
	 */
	public void setId(long id) {
		this.id = id;
	}


	/**
	 * Getter of the property <tt>nome</tt>
	 * 
	 * @return Returns the nome.
	 * @uml.property name="nome"
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Setter of the property <tt>nome</tt>
	 * 
	 * @param nome
	 *            The nome to set.
	 * @uml.property name="nome"
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Getter of the property <tt>cpf</tt>
	 * 
	 * @return Returns the cpf.
	 * @uml.property name="cpf"
	 */
	public String getCpf() {
		return cpf;
	}

	/**
	 * Setter of the property <tt>cpf</tt>
	 * 
	 * @param cpf
	 *            The cpf to set.
	 * @uml.property name="cpf"
	 */
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	/**
	 * @uml.property name="idade"
	 */
	@Column(name = "idade")
	private long idade;

	/**
	 * Getter of the property <tt>idade</tt>
	 * 
	 * @return Returns the idade.
	 * @uml.property name="idade"
	 */
	public long getIdade() {
		return idade;
	}

	/**
	 * Setter of the property <tt>idade</tt>
	 * 
	 * @param idade
	 *            The idade to set.
	 * @uml.property name="idade"
	 */
	public void setIdade(long idade) {
		this.idade = idade;
	}

	public List<Endereco> getEndereco() {
		return endereco;
	}

	public void setEndereco(List<Endereco> endereco) {
		this.endereco = endereco;
	}

	

}
